Registered S3 method overwritten by 'data.table':
method from
print.data.table
data.table 1.12.8 using 8 threads (see ?getDTthreads). Latest news: r-datatable.com
Evolution in Switzerland and Western Europe
The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.
What Happened in Hubei Province (China)





Comparison of Number of Confirmed Cases in Western Europe


Comparison of Number of Deaths in Western Europe


Comparison of Number of Recovered Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


Comparison of Number of Active Cases in Western Europe
WARNING: The figures seem to be wrong on March 23, 2020.


LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICBmaWdfaGVpZ2h0OiA1CiAgICBmaWdfd2lkdGg6IDcKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6IAogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDogZGVmYXVsdApkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWSAtICVIOiVNJylgIgphdXRob3I6ICJQaGlsaXBwZSBEb2NvdXJ0IgotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCgpnZXRfdGltZXNlcmllc19hc192ZWN0b3IgPC0gZnVuY3Rpb24oZGYpIHsKICB0bXAgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYygxOjQpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZSh0bXApKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9CgpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5IDwtIGZ1bmN0aW9uKGNvdW50cnkuY29uZmlybWVkLCBjb3VudHJ5LmRlYXRocywgY291bnRyeS5yZWNvdmVyZWQsIGNvdW50cnkubmFtZSwgcHVibGljLnNwYWNlcy5jbG9zZWQuYXQ9TkEsIGNvbmZpbmVtZW50LmF0PU5BLCB0cmVuZC5hbmdsZT0yMCkgewogICAgZGF5LmNvdW50IDwtIG5yb3coY291bnRyeS5jb25maXJtZWQpCiAgeWxpbSA8LSBjKDAsIDEuMyAqIG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSkKICBkYXkuc3RhcnQgPC0gbWluKGMoMzUsIHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb25maW5lbWVudC5hdCksIG5hLnJtID0gVFJVRSkKICBwbG90KGNvdW50cnkuY29uZmlybWVkLCBtYWluPSBwYXN0ZSgiQ2FzZXMgaW4iLCBjb3VudHJ5Lm5hbWUpLCB0eXBlID0gIm8iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQsIGRheS5jb3VudCArIDcpLCB5bGltID0geWxpbSkKICBsaW5lcyhzZXEoMSwgbGVuZ3RoKGNvdW50cnkuZGVhdGhzKSksIGNvdW50cnkuZGVhdGhzLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siLCBsdHkgPSAxLCBsdyA9IDEpCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LnJlY292ZXJlZCkpLCBjb3VudHJ5LnJlY292ZXJlZCwgdHlwZSA9ICJsIiwgY29sID0gImdyZWVuIiwgbHR5ID0gMSwgbHcgPSAxKQogIGdyaWQoKQogIGF4aXMoc2lkZSA9IDEsIGF0ID0gc2VxKGRheS5zdGFydCAlLyUgNSAqIDUsIGRheS5jb3VudCwgNSkpCiAgCiAgIyBUcmVuZCBiYXNlZCBvbiBsYXN0IHR3byBvYnNlcnZhdGlvbnMgKGxhc3QgZGF5KS4KICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMikKICBkeSA8LWxhc3QuY29uZmlybWVkWzJdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeQogIHUgPC0gYygxLCBkeSkKICBhIDwtIGxhc3QuY29uZmlybWVkWzFdIC0gKGRheS5jb3VudCAtIDEpICogc2xvcGUKICBhYmxpbmUoYSA9IGEsIGIgPSBzbG9wZSwgY29sID0gInZpb2xldCIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgLSA0LCB5ID0gMC41ICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy9kYXlcbkV4dHJhcG9sYXRpb246IiwgZHkgKiA3LCAiY2FzZS93ZWVrXG4iLCBsYXN0LnByb2dyZXNzaW9uLnBjdCwgIiUgcHJvZ3Jlc3MgbGFzdCBkYXkiKSwgc3J0ID0gdHJlbmQuYW5nbGUsIGNvbCA9ICJ2aW9sZXQiKQogIAogICMgVHJlbmQgYmFzZWQgb24gbGFzdCA4IG9ic2VydmF0aW9ucyAoNyBpbnRlcnZhbHMsIG9uZSB3ZWVrKQogIGxhc3QuY29uZmlybWVkIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG4gPSA4KQogIGR5IDwtbGFzdC5jb25maXJtZWRbOF0gLSBsYXN0LmNvbmZpcm1lZFsxXQogIHNsb3BlIDwtIGR5IC8gNwogIHUgPC0gYyg3LCBkeSkKICBhIDwtIGxhc3QuY29uZmlybWVkWzFdIC0gKGRheS5jb3VudCAtIDcpICogc2xvcGUKICBhYmxpbmUoYSA9IGEsIGIgPSBzbG9wZSwgY29sID0gImJsYWNrIiwgbHcgPSAxLjUsIGx0eSA9IDQpCiAgbGFzdC5wcm9ncmVzc2lvbi5wY3QgPC0gcm91bmQoKDEwMCAqIGR5KSAvIGxhc3QuY29uZmlybWVkWzFdKQogIHRleHQoeCA9IGRheS5jb3VudCAtIDgsIHkgPSAoMC44OCAtICh0cmVuZC5hbmdsZS8zMDAwKSkgKiB5bGltWzJdLCBwYXN0ZShkeSwgImNhc2VzL3dlZWtcbkF2ZzoiLCBkeSAlLyUgNywgImNhc2UvZGF5XG4iLCBsYXN0LnByb2dyZXNzaW9uLnBjdCwgIiUgcHJvZ3Jlc3MgbGFzdCB3ZWVrIiksIHNydCA9IHRyZW5kLmFuZ2xlLCBjb2wgPSAiYmxhY2siKQogIAogICMgU2hvdyBzcGVjaWFsIG1lYXN1cmVzIGFnYWluc3QgcHJvcGFnYXRpb24uCiAgeXBvcyA9IG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSAlLyUgMwogIGlmICghaXMubmEocHVibGljLnNwYWNlcy5jbG9zZWQuYXQpKSB7CiAgICBhYmxpbmUodiA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb2wgPSAiYmx1ZSIsIGx3ID0gMSwgbHR5ID0gNSkKICAgIHRleHQoeCA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0IC0gMSwgeSA9IHlwb3MsICJBbGwgcHVibGljIHNwYWNlcyBhcmUgY2xvc2VkIiwgY29sID0gImJsdWUiLCBzcnQgPSA5MCkKICB9CiAgaWYgKCFpcy5uYShjb25maW5lbWVudC5hdCkpIHsKICAgIGFibGluZSh2ID0gY29uZmluZW1lbnQuYXQsIGNvbCA9ICJyZWQiLCBsdyA9IDEsIGx0eSA9IDUpCiAgICB0ZXh0KHggPSBjb25maW5lbWVudC5hdCAtIDEsIHkgPSB5cG9zLCAiUG9wdWxhdGlvbiBpcyBjb25maW5lZCIsIGNvbCA9ICJyZWQiLCBzcnQgPSA5MCkKICB9CiAgCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQ29uZmlybWVkIiwgIkRlYXRocyIsICJSZWNvdmVyZWQiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3QgZGF5IiwgIkNvbmZpcm1lZCB0cmVuZCBiYXNlZCBvbiBsYXN0IHdlZWsiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgImdyZWVuIiwgInZpb2xldCIsICJibGFjayIpLCBsdHkgPSBjKHJlcCgxLCAzKSwgMiwgMyksIGx3ID0gYyhyZXAoMSwgMyksIDEuNSwgMS41KSkKICAKICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiYmx1ZSIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LmRlYXRocykKICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImJsYWNrIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IERlYXRocyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgaWYgKCFpcy5uYShjb3VudHJ5LnJlY292ZXJlZCkpIHsKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5yZWNvdmVyZWQpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImdyZWVuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksICBtYWluID0gcGFzdGUoIk5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSBpbiIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiLCBsd2QgPSA1KQogICAgZ3JpZCgpCiAgICAKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQgLSAoY291bnRyeS5kZWF0aHMgKyBjb3VudHJ5LnJlY292ZXJlZCkpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiLCBsd2Q9NSkKICAgIGdyaWQoKQogIH0KfQoKY292aWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX2dsb2JhbC5jc3YiKQpjb3ZpZC5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX2dsb2JhbC5jc3YiKQpjb3ZpZC5yZWNvdmVyZWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfcmVjb3ZlcmVkX2dsb2JhbC5jc3YiKQoKY291bnRyeS5uYW1lcyA8LSBjKCJTd2l0emVybGFuZCIsICJJdGFseSIsICJGcmFuY2UiLCAiR2VybWFueSIsICJBdXN0cmlhIiAsICJTcGFpbiIsICJHcmVhdCBCcml0YWluIiwgIkRlbm1hcmsiLCAiTm9yd2F5IiwgIlN3ZWRlbiIsICJJY2VsYW5kIikKY291bnRyeS5jb3VudCA8LSBsZW5ndGgoY291bnRyeS5uYW1lcykKY29sIDwtIHJhaW5ib3coY291bnRyeS5jb3VudCkKbHR5IDwtIHNlcSgxLCBjb3VudHJ5LmNvdW50KQpwY2ggPC0gc2VxKDEwLCAxMCArIGNvdW50cnkuY291bnQpCgpzd2l0emVybGFuZC5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCnN3aXR6ZXJsYW5kLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCnN3aXR6ZXJsYW5kLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3aXR6ZXJsYW5kIikpCgppdGFseS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCgpmcmFuY2UuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpmcmFuY2UuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZnJhbmNlLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpnZXJtYW55LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQpnZXJtYW55LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKZ2VybWFueS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCgphdXN0cmlhLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQphdXN0cmlhLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKYXVzdHJpYS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCgpzcGFpbi5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCgp1ay5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKdWsuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQp1ay5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpkZW5tYXJrLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmRlbm1hcmsucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRGVubWFyayIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCgpub3J3YXkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCm5vcndheS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCgpzd2VkZW4uY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKc3dlZGVuLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQpzd2VkZW4ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCgppY2VsYW5kLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQppY2VsYW5kLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKaWNlbGFuZC5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCgpjb3VudHJpZXMuY29uZmlybWVkIDwtIGxpc3Qoc3dpdHplcmxhbmQuY29uZmlybWVkLCBpdGFseS5jb25maXJtZWQsIGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuY29uZmlybWVkLCBhdXN0cmlhLmNvbmZpcm1lZCwgc3BhaW4uY29uZmlybWVkLCB1ay5jb25maXJtZWQsIGRlbm1hcmsuY29uZmlybWVkLCBub3J3YXkuY29uZmlybWVkLCBzd2VkZW4uY29uZmlybWVkLCBpY2VsYW5kLmNvbmZpcm1lZCkKY291bnRyaWVzLmRlYXRocyA8LSBsaXN0KHN3aXR6ZXJsYW5kLmRlYXRocywgaXRhbHkuZGVhdGhzLCBmcmFuY2UuZGVhdGhzLCBnZXJtYW55LmRlYXRocywgYXVzdHJpYS5kZWF0aHMsIHNwYWluLmRlYXRocywgdWsuZGVhdGhzLCBkZW5tYXJrLmRlYXRocywgbm9yd2F5LmRlYXRocywgc3dlZGVuLmRlYXRocywgaWNlbGFuZC5kZWF0aHMpCmNvdW50cmllcy5yZWNvdmVyZWQgPC0gbGlzdChzd2l0emVybGFuZC5yZWNvdmVyZWQsIGl0YWx5LnJlY292ZXJlZCwgZnJhbmNlLnJlY292ZXJlZCwgZ2VybWFueS5yZWNvdmVyZWQsIGF1c3RyaWEucmVjb3ZlcmVkLCBzcGFpbi5yZWNvdmVyZWQsIHVrLnJlY292ZXJlZCwgZGVubWFyay5yZWNvdmVyZWQsIG5vcndheS5yZWNvdmVyZWQsIHN3ZWRlbi5jb25maXJtZWQsIGljZWxhbmQucmVjb3ZlcmVkKQoKCmRheS5jb3VudCA8LSBOUk9XKHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCkKYGBgCgojIEV2b2x1dGlvbiBpbiBTd2l0emVybGFuZCBhbmQgV2VzdGVybiBFdXJvcGUKClRoZSBmaWd1cmVzIGRvIG5vdCByZXByZXNlbnQgdGhlIHNhbWUgdGhpbmcgaW4gZWFjaCBjb3VudHJ5LCBkZXBlbmRpbmcgb24gdGhlIGV4dGVudCBvZiB0aGUgc2NyZWVuaW5nIHRlc3RzIGNhcnJpZWQgb3V0LiBSZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbSwgdGhlIHdlZWtseSBhbmQgZGFpbHkgdHJlbmQgY3VydmVzIGFsbG93IHlvdSB0byBnZXQgYW4gaWRlYSBvZiB0aGUgZm9yZXNlZWFibGUgZXZvbHV0aW9uIGZvciB0aGUgbmV4dCBkYXlzIChhc3N1bWluZyB0aGF0IHRoZSBzY3JlZW5pbmcgc3RyYXRlZ3kgZG9lcyBub3QgY2hhbmdlIG92ZXIgdGltZSkuIFJlc3BlY3RpdmVseSwgaXQgcHJvdmlkZXMgYW4gaW5kaWNhdGlvbiBvZiBhIHBvc3NpYmxlIGluZmxlY3Rpb24gb2YgdGhlIHByb2dyZXNzaW9uIG9mIHRoZSBlcGlkZW1pYyBpbiB0aGUgbmVhciBmdXR1cmUuCgojIyBTd2l0emVybGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzd2l0emVybGFuZC5jb25maXJtZWQsIHN3aXR6ZXJsYW5kLmRlYXRocywgc3dpdHplcmxhbmQucmVjb3ZlcmVkLCAiU3dpdHplcmxhbmQiLCA1NSwgTkEsIHRyZW5kLmFuZ2xlID0gMTApCmBgYAoKIyMgSXRhbHkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoaXRhbHkuY29uZmlybWVkLCBpdGFseS5kZWF0aHMsIGl0YWx5LnJlY292ZXJlZCwgIkl0YWx5IiwgTkEsIDQ5KQpgYGAKCiMjIEZyYW5jZQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShmcmFuY2UuY29uZmlybWVkLCBnZXJtYW55LmRlYXRocywgZnJhbmNlLnJlY292ZXJlZCwgIkZyYW5jZSIsIDUzLCA1NiwgdHJlbmQuYW5nbGUgPSAxMCkKYGBgCgojIyBHZXJtYW55CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGdlcm1hbnkuY29uZmlybWVkLCBzd2l0emVybGFuZC5kZWF0aHMsIGdlcm1hbnkucmVjb3ZlcmVkLCAiR2VybWFueSIsIDQ4LCBOQSwgdHJlbmQuYW5nbGUgPSAxNSkKYGBgCgojIyBBdXN0cmlhCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGF1c3RyaWEuY29uZmlybWVkLCBhdXN0cmlhLmRlYXRocywgYXVzdHJpYS5yZWNvdmVyZWQsICJBdXN0cmlhIiwgNTIsIE5BLCB0cmVuZC5hbmdsZSA9IDgpCmBgYAoKIyMgU3BhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3BhaW4uY29uZmlybWVkLCBzcGFpbi5kZWF0aHMsIHNwYWluLnJlY292ZXJlZCwgIlNwYWluIiwgTkEsIDUzLCB0cmVuZC5hbmdsZSA9IDE1KQpgYGAKCiMjIEdyZWF0IEJyaXRhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkodWsuY29uZmlybWVkLCB1ay5kZWF0aHMsIHVrLnJlY292ZXJlZCwgIkdyZWF0IEJyaXRhaW4iLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNDApCmBgYAoKIyMgRGVubWFyawpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShkZW5tYXJrLmNvbmZpcm1lZCwgZGVubWFyay5kZWF0aHMsIGRlbm1hcmsucmVjb3ZlcmVkLCAiRGVubWFyayIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSAyMCkKYGBgCgojIyBOb3J3YXkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkobm9yd2F5LmNvbmZpcm1lZCwgbm9yd2F5LmRlYXRocywgbm9yd2F5LnJlY292ZXJlZCwgIk5vcndheSIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSAzKQpgYGAKCiMjIFN3ZWRlbgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShzd2VkZW4uY29uZmlybWVkLCBzd2VkZW4uZGVhdGhzLCBzd2VkZW4ucmVjb3ZlcmVkLCAiU3dlZGVuIiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDQwKQpgYGAKCiMjIEljZWxhbmQKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoaWNlbGFuZC5jb25maXJtZWQsIGljZWxhbmQuZGVhdGhzLCBpY2VsYW5kLnJlY292ZXJlZCwgIkljZWxhbmQiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gMykKYGBgCgojIFdoYXQgSGFwcGVuZWQgaW4gSHViZWkgUHJvdmluY2UgKENoaW5hKQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cmh1YmVpLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQpodWJlaS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKCnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoaHViZWkuY29uZmlybWVkLCBodWJlaS5kZWF0aHMsIGh1YmVpLnJlY292ZXJlZCwgIkh1YmVpIFByb3ZpbmNlLCBDaGluYSIsIE5BLCAyLCB0cmVuZC5hbmdsZSA9IDApCmBgYAoKIyBXaGF0IElzIEhhcHBlbmluZyBpbiBVU0EKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EgPC0gZnVuY3Rpb24oZGYsIGV4bHVkZSkgewogIHRtcCA8LSBjb2xTdW1zKHN1YnNldChkZiwgc2VsZWN0ID0gLWV4bHVkZSkpCiAgdG1wIDwtIHNhcHBseShhcy52ZWN0b3IodHJhbnNwb3NlKGFzLmxpc3QodG1wKSkpLCBhcy5pbnRlZ2VyKQogIHJldHVybih0bXApCn0KCmNvdmlkLnVzIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2NvbmZpcm1lZF9VUy5jc3YiKQpjb3ZpZC51cy5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX1VTLmNzdiIpCgp1c2EuY29uZmlybWVkIDwtIHN1YnNldChjb3ZpZC51cywgaXNvMyA9PSAiVVNBIikKdXNhLmRlYXRocyA8LSBzdWJzZXQoY292aWQudXMuZGVhdGhzLCBpc28zID09ICJVU0EiKQoKdXNhLmNvbmZpcm1lZCA8LSBnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EodXNhLmNvbmZpcm1lZCwgYygxOjExKSkKdXNhLmRlYXRocyA8LSBnZXRfc3VtX29mX3RpbWVzZXJpZXNfYXNfdmVjdG9yX2Zvcl91c2EodXNhLmRlYXRocywgYygxOjEyKSkKCnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkodXNhLmNvbmZpcm1lZCwgdXNhLmRlYXRocywgTkEsICJVU0EiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlPTM1KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQ29uZmlybWVkIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoMzUsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkNvbmZpcm1lZCBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDEsIGRheS5jb3VudCksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSBsdHlbaV0sIHBjaCA9IHBjaFtpXSwgbHcgPSAxKQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBkaWZmKHRhaWwoY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSkpLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoZGF5LmNvdW50LTEwLCBkYXkuY291bnQpCnlyYW5nZSA8LSBjKDAsIG1heC55ICogMikKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IENhc2VzIHBlciBEYXkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wOCAqIGksIGRpZmYoY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDQpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIERlYXRocyBpbiBXZXN0ZXJuIEV1cm9wZQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMuZGVhdGhzW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJEZWF0aHMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIERlYXRocyIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMSwgZGF5LmNvdW50KSwgY291bnRyaWVzLmRlYXRoc1tbaV1dLCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IGx0eVtpXSwgcGNoID0gcGNoW2ldLCBsdyA9IDEpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMuZGVhdGhzW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAyKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IERlYXRocyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgRGVhdGhzIHBlciBEYXkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wOCAqIGksIGRpZmYoY291bnRyaWVzLmRlYXRoc1tbaV1dKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDQpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIFJlY292ZXJlZCBDYXNlcyBpbiBXZXN0ZXJuIEV1cm9wZQoKV0FSTklORzogVGhlIGZpZ3VyZXMgc2VlbSB0byBiZSB3cm9uZyBvbiBNYXJjaCAyMywgMjAyMC4KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYyg0MCwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgY291bnRyaWVzLnJlY292ZXJlZFtbaV1dKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKDUwLCBkYXkuY291bnQpCnlyYW5nZSA8LSBjKDAsIG1heC55KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiUmVjb3ZlcmVkIENhc2VzIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBkIDwtIG5yb3coY291bnRyaWVzLnJlY292ZXJlZFtbaV1dKQogIGxpbmVzKHNlcSgxLCBkKSwgY291bnRyaWVzLnJlY292ZXJlZFtbaV1dLCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IGx0eVtpXSwgcGNoID0gcGNoW2ldLCBsdyA9IDEpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAyKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IFJlY292ZXJlZCBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wOCAqIGksIGRpZmYoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDQpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIEFjdGl2ZSBDYXNlcyBpbiBXZXN0ZXJuIEV1cm9wZQoKV0FSTklORzogVGhlIGZpZ3VyZXMgc2VlbSB0byBiZSB3cm9uZyBvbiBNYXJjaCAyMywgMjAyMC4KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYyg0MCwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICB5IDwtIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSAtIChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0gKyBjb3VudHJpZXMuZGVhdGhzW1tpXV0pCiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIHkpLCBuYS5ybSA9IFRSVUUpCn0KeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJBY3RpdmUgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBsaW5lcyhzZXEoMSwgZCksIHksIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptaW4ueSA8LSAwCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICB5IDwtIHRhaWwoeSwgMTApCiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYoeSkpLCBuYS5ybSA9IFRSVUUpCiAgbWluLnkgPC0gbWluKGMobWluLnksIGRpZmYoeSkpLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoZGF5LmNvdW50LTEwLCBkYXkuY291bnQpCnlyYW5nZSA8LSBjKG1pbi55LCBtYXgueSAqIDIpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICB5IDwtIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSAtIChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0gKyBjb3VudHJpZXMuZGVhdGhzW1tpXV0pCiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wOCAqIGksIGRpZmYoeSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSA0KQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSA0LCBjZXggPSAwLjkpCmBgYAoKIyBBYm91dAoKQWxsIHRoZSBncmFwaHMgYWJvdmUgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IEpvaG5zIEhvcGtpbnMgQ1NTRSAocHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBzdHJpY3RseSBmb3IgZWR1Y2F0aW9uYWwgYW5kIGFjYWRlbWljIHJlc2VhcmNoIHB1cnBvc2VzKS4KClRoZSBzb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyB0aGUgZ3JhcGhzIGlzIGF2YWlsYWJsZSB1bmRlciBNSVQgTGljZW5zZSBhdCBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwcGUtZG9jb3VydC9DT1ZJRC0xOS9ibG9iL21hc3Rlci9jb3ZpZF8xOV93ZXN0ZXJuX2V1cm9wZS5SbWQuCgpUaGUgZGF0YSBhcmUgcHJvdmlkZWQgYXMgKjIwMTkgTm92ZWwgQ29yb25hdmlydXMgQ09WSUQtMTkgKDIwMTktbkNvVikgRGF0YSBSZXBvc2l0b3J5IGJ5IEpvaG5zIEhvcGtpbnMgQ1NTRSogKHNlZSBodHRwczovL2dpdGh1Yi5jb20vQ1NTRUdJU2FuZERhdGEvQ09WSUQtMTkpLgoKU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZCBmb3IgbW9yZSBkZXRhaWxzLgoKIyMgRGF0YSBTb3VyY2VzCgoqIFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24gKFdITyk6IGh0dHBzOi8vd3d3Lndoby5pbnQvCiogRFhZLmNuLiBQbmV1bW9uaWEuIDIwMjAuIGh0dHA6Ly8zZy5keHkuY24vbmV3aDUvdmlldy9wbmV1bW9uaWEuCiogQk5PIE5ld3M6IGh0dHBzOi8vYm5vbmV3cy5jb20vaW5kZXgucGhwLzIwMjAvMDIvdGhlLWxhdGVzdC1jb3JvbmF2aXJ1cy1jYXNlcy8KKiBOYXRpb25hbCBIZWFsdGggQ29tbWlzc2lvbiBvZiB0aGUgUGVvcGxl4oCZcyBSZXB1YmxpYyBvZiBDaGluYSAoTkhDKToKKiBodHRwOi8vd3d3Lm5oYy5nb3YuY24veGNzL3lxdGIvbGlzdF9nemJkLnNodG1sCiogQ2hpbmEgQ0RDIChDQ0RDKTogaHR0cDovL3dlZWtseS5jaGluYWNkYy5jbi9uZXdzL1RyYWNraW5ndGhlRXBpZGVtaWMuaHRtCiogSG9uZyBLb25nIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5jaHAuZ292LmhrL2VuL2ZlYXR1cmVzLzEwMjQ2NS5odG1sCiogTWFjYXUgR292ZXJubWVudDogaHR0cHM6Ly93d3cuc3NtLmdvdi5tby9wb3J0YWwvCiogVGFpd2FuIENEQzogaHR0cHM6Ly9zaXRlcy5nb29nbGUuY29tL2NkYy5nb3YudHcvMjAxOW5jb3YvdGFpd2FuP2F1dGh1c2VyPTAKKiBVUyBDREM6IGh0dHBzOi8vd3d3LmNkYy5nb3YvY29yb25hdmlydXMvMjAxOS1uY292L2luZGV4Lmh0bWwKKiBHb3Zlcm5tZW50IG9mIENhbmFkYTogaHR0cHM6Ly93d3cuY2FuYWRhLmNhL2VuL3B1YmxpYy1oZWFsdGgvc2VydmljZXMvZGlzZWFzZXMvY29yb25hdmlydXMuaHRtbAoqIEF1c3RyYWxpYSBHb3Zlcm5tZW50IERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5oZWFsdGguZ292LmF1L25ld3MvY29yb25hdmlydXMtdXBkYXRlLWF0LWEtZ2xhbmNlCiogRXVyb3BlYW4gQ2VudHJlIGZvciBEaXNlYXNlIFByZXZlbnRpb24gYW5kIENvbnRyb2wgKEVDREMpOiBodHRwczovL3d3dy5lY2RjLmV1cm9wYS5ldS9lbi9nZW9ncmFwaGljYWwtZGlzdHJpYnV0aW9uLTIwMTktbmNvdi1jYXNlcwoqIE1pbmlzdHJ5IG9mIEhlYWx0aCBTaW5nYXBvcmUgKE1PSCk6IGh0dHBzOi8vd3d3Lm1vaC5nb3Yuc2cvY292aWQtMTkKKiBJdGFseSBNaW5pc3RyeSBvZiBIZWFsdGg6IGh0dHA6Ly93d3cuc2FsdXRlLmdvdi5pdC9udW92b2Nvcm9uYXZpcnVzCgojIyBUZXJtcyBvZiBVc2UKCiogRGF0YSA6IENvcHlyaWdodCAyMDIwIEpvaG5zIEhvcGtpbnMgVW5pdmVyc2l0eSwgYWxsIHJpZ2h0cyByZXNlcnZlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOS9ibG9iL21hc3Rlci9SRUFETUUubWQuCiogU291cmNlIGNvZGUgZm9yIGdlbmVyYXRpbmcgZ3JhcGhzOiBDb3B5cmlnaHQgUGhpbGlwcGUgRG9jb3VydC4gTGljZW5zZWQgdW5kZXIgTUlUIExpY2Vuc2UuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwcGUtZG9jb3VydC9DT1ZJRC0xOS9ibG9iL21hc3Rlci9jb3ZpZF8xOV93ZXN0ZXJuX2V1cm9wZS5SbWQuCiogR3JhcGhpY3MgOiBQdWJsaWMgRG9tYWluCgo=